home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / OS / FWOSMisc / FWTime.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  9.6 KB  |  339 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWTime.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef FWTIME_H
  13. #include "FWTime.h"
  14. #endif
  15.  
  16. #ifndef FWSTRING_H
  17. #include "FWString.h"
  18. #endif
  19.  
  20. #if defined(FW_BUILD_MAC) && !defined(__TEXTUTILS__)
  21. #include <TextUtils.h>
  22. #endif
  23.  
  24. //========================================================================================
  25. //    Runtime Informations
  26. //========================================================================================
  27.  
  28. #ifdef FW_BUILD_MAC    
  29. #pragma segment fwosmisc
  30. #endif
  31.  
  32. //========================================================================================
  33. // CLASS FW_CTime
  34. //========================================================================================
  35.  
  36. //----------------------------------------------------------------------------------------
  37. // FW_CTime constructor
  38. //----------------------------------------------------------------------------------------
  39.  
  40. FW_CTime::FW_CTime() : 
  41.     fTime(0)
  42. {
  43.     ::time(&fTime);
  44. }
  45.  
  46. //----------------------------------------------------------------------------------------
  47. // FW_CTime constructor
  48. //----------------------------------------------------------------------------------------
  49.  
  50. FW_CTime::FW_CTime(short year, short month, short day, short hour, short minute, short second)
  51. {
  52.     struct tm dateTime;
  53.  
  54.     dateTime.tm_year = year - 1900;
  55.     dateTime.tm_mon = month - 1;            // Specified as 1-12, expects 0-11
  56.     dateTime.tm_mday = day;
  57.     dateTime.tm_hour = hour;
  58.     dateTime.tm_min = minute;
  59.     dateTime.tm_sec = second;
  60.     
  61.     fTime = mktime(&dateTime);
  62. }
  63.  
  64. //----------------------------------------------------------------------------------------
  65. // FW_CTime::GetCurrentTime
  66. //----------------------------------------------------------------------------------------
  67.  
  68. FW_CTime FW_CTime::GetCurrentTime()
  69. {
  70.     time_t dateTime;
  71.  
  72.     ::time(&dateTime);
  73.  
  74.     return FW_CTime(dateTime);
  75. }
  76.  
  77. //----------------------------------------------------------------------------------------
  78. // FW_CTime::GetSecond
  79. //----------------------------------------------------------------------------------------
  80.  
  81. short FW_CTime::GetSecond() const
  82. {
  83.     struct tm* dateTime;
  84.     
  85.     dateTime = localtime(&fTime);
  86.     return dateTime->tm_sec;
  87. }
  88.  
  89. //----------------------------------------------------------------------------------------
  90. // FW_CTime::GetMinute
  91. //----------------------------------------------------------------------------------------
  92.  
  93. short FW_CTime::GetMinute() const
  94. {
  95.     struct tm* dateTime;
  96.     
  97.     dateTime = localtime(&fTime);
  98.     return dateTime->tm_min;
  99. }
  100.  
  101. //----------------------------------------------------------------------------------------
  102. // FW_CTime::GetHour
  103. //----------------------------------------------------------------------------------------
  104.  
  105. short FW_CTime::GetHour() const
  106. {
  107.     struct tm* dateTime;
  108.     
  109.     dateTime = localtime(&fTime);
  110.     return dateTime->tm_hour;
  111. }
  112.  
  113. //----------------------------------------------------------------------------------------
  114. // FW_CTime::GetDayOfWeek
  115. //----------------------------------------------------------------------------------------
  116.  
  117. short FW_CTime::GetDayOfWeek() const
  118. {
  119.     struct tm* dateTime;
  120.     
  121.     dateTime = localtime(&fTime);
  122.     return dateTime->tm_wday + 1;
  123. }
  124.  
  125. //----------------------------------------------------------------------------------------
  126. // FW_CTime::GetDayOfMonth
  127. //----------------------------------------------------------------------------------------
  128.  
  129. short FW_CTime::GetDayOfMonth() const
  130. {
  131.     struct tm* dateTime;
  132.     
  133.     dateTime = localtime(&fTime);
  134.     return dateTime->tm_mday;
  135. }
  136.  
  137. //----------------------------------------------------------------------------------------
  138. // FW_CTime::GetDayOfYear
  139. //----------------------------------------------------------------------------------------
  140.  
  141. short FW_CTime::GetDayOfYear() const
  142. {
  143.     struct tm* dateTime;
  144.     
  145.     dateTime = localtime(&fTime);
  146.     return dateTime->tm_yday;        // 0 thru 365
  147. }
  148.  
  149. //----------------------------------------------------------------------------------------
  150. // FW_CTime::GetMonth
  151. //----------------------------------------------------------------------------------------
  152.  
  153. short FW_CTime::GetMonth() const
  154. {
  155.     struct tm* dateTime;
  156.     
  157.     dateTime = localtime(&fTime);
  158.     return dateTime->tm_mon + 1;
  159. }
  160.  
  161. //----------------------------------------------------------------------------------------
  162. // FW_CTime::GetYear
  163. //----------------------------------------------------------------------------------------
  164.  
  165. short FW_CTime::GetYear() const
  166. {
  167.     struct tm* dateTime;
  168.     
  169.     dateTime = localtime(&fTime);
  170.     return dateTime->tm_year + 1900;
  171. }
  172.  
  173. //----------------------------------------------------------------------------------------
  174. // FW_CTime::IsDaylightSavings
  175. //----------------------------------------------------------------------------------------
  176.  
  177. short FW_CTime::IsDaylightSavings() const
  178. {
  179.     struct tm* dateTime;
  180.     
  181.     dateTime = localtime(&fTime);
  182.     return dateTime->tm_isdst;
  183. }
  184.  
  185. #ifdef FW_BUILD_MAC
  186. //----------------------------------------------------------------------------------------
  187. // FW_CTime::MacConvertMacTimeToODTime
  188. //----------------------------------------------------------------------------------------
  189.  
  190. ODTime FW_CTime::MacConvertMacTimeToODTime(unsigned long t)
  191. {
  192.     struct tm dateTime;
  193.     DateTimeRec macDateTime;
  194.  
  195.     ::SecondsToDate(t, &macDateTime);
  196.  
  197.     dateTime.tm_year = macDateTime.year - 1900;
  198.     dateTime.tm_mon = macDateTime.month - 1;
  199.     dateTime.tm_mday = macDateTime.day;
  200.     dateTime.tm_hour = macDateTime.hour;
  201.     dateTime.tm_min = macDateTime.minute;
  202.     dateTime.tm_sec = macDateTime.second;
  203.     
  204.     return mktime(&dateTime);
  205. }
  206. #endif
  207.  
  208. //----------------------------------------------------------------------------------------
  209. // FW_CTime::MacConvertODTimeToMacTime
  210. //----------------------------------------------------------------------------------------
  211.  
  212. #ifdef FW_BUILD_MAC
  213. unsigned long FW_CTime::MacConvertODTimeToMacTime(ODTime t)
  214. {
  215.     struct tm* dateTime = localtime(&t);
  216.     unsigned long macTime;
  217.     DateTimeRec macDateTime;
  218.  
  219.     macDateTime.year = dateTime->tm_year + 1900;
  220.     macDateTime.month = dateTime->tm_mon + 1;
  221.     macDateTime.day = dateTime->tm_mday;
  222.     macDateTime.hour = dateTime->tm_hour;
  223.     macDateTime.minute = dateTime->tm_min;
  224.     macDateTime.second = dateTime->tm_sec;
  225.  
  226.     ::DateToSeconds(&macDateTime, &macTime);
  227.     return macTime;
  228. }
  229. #endif
  230.  
  231. //----------------------------------------------------------------------------------------
  232. // FW_CTime::GetTimeString
  233. //----------------------------------------------------------------------------------------
  234.  
  235. void FW_CTime::GetTimeString(FW_CString& timeString, FW_Boolean displaySeconds) const
  236. {
  237. #ifdef FW_BUILD_MAC
  238.     Str32 tempString;
  239.     ::IUTimeString(MacConvertODTimeToMacTime(fTime), displaySeconds, tempString);    
  240.  
  241.     timeString.ReplaceAll(tempString);
  242. #endif
  243.  
  244. #ifdef FW_BUILD_WIN
  245.     struct tm* dateTime;
  246.     FW_Char tempString[32];
  247.     
  248.     dateTime = localtime(&fTime);
  249.     strftime(tempString, 32, "%X", dateTime);
  250.     
  251.     timeString.ReplaceAll(tempString);
  252.     FW_UNUSED(displaySeconds);
  253. #endif
  254. }
  255.  
  256. //----------------------------------------------------------------------------------------
  257. // FW_CTime::GetDateString
  258. //----------------------------------------------------------------------------------------
  259.  
  260. void FW_CTime::GetDateString(FW_CString& dateString, DateForm form) const
  261. {
  262. #ifdef FW_BUILD_MAC
  263.     Str255 tempString;
  264.     ODTime t = MacConvertODTimeToMacTime(fTime);
  265.     
  266.     if (form == kShortDate)
  267.         ::IUDateString(t, shortDate, tempString);    
  268.     else if (form == kLongDate)
  269.         ::IUDateString(t, longDate, tempString);
  270.     else
  271.         ::IUDateString(t, abbrevDate, tempString);
  272.  
  273.     dateString.ReplaceAll(tempString);
  274. #endif
  275.  
  276. #ifdef FW_BUILD_WIN
  277.     struct tm* dateTime;
  278.     FW_Char tempString[255];
  279.     
  280.     dateTime = localtime(&fTime);
  281.     strftime(tempString, 255, "%x", dateTime);
  282.     
  283.     dateString.ReplaceAll(tempString);
  284. FW_UNUSED(form);
  285. #endif
  286. }
  287.  
  288. //----------------------------------------------------------------------------------------
  289. //    FW_CTime::operator -
  290. //----------------------------------------------------------------------------------------
  291.  
  292. FW_CTime FW_CTime::operator-(FW_CTimeSpan timeSpan) const
  293. {
  294.     return FW_CTime(fTime - timeSpan.GetTotalSeconds());
  295. }
  296.  
  297. //----------------------------------------------------------------------------------------
  298. //    FW_CTime::operator -
  299. //----------------------------------------------------------------------------------------
  300.  
  301. FW_CTimeSpan FW_CTime::operator-(FW_CTime time) const
  302. {
  303.     return FW_CTimeSpan(fTime - time.GetTime());
  304. }
  305.  
  306. //----------------------------------------------------------------------------------------
  307. //    FW_CTime::operator +
  308. //----------------------------------------------------------------------------------------
  309.  
  310. FW_CTime FW_CTime::operator+(FW_CTimeSpan timeSpan) const
  311. {
  312.     return FW_CTime(fTime + timeSpan.GetTotalSeconds());
  313. }
  314.  
  315. //----------------------------------------------------------------------------------------
  316. //    FW_CTime::operator -=
  317. //----------------------------------------------------------------------------------------
  318.  
  319. const FW_CTime& FW_CTime::operator-=(FW_CTimeSpan timeSpan)
  320. {
  321.     fTime -= timeSpan.GetTotalSeconds();
  322.     return *this;
  323. }
  324.  
  325. //----------------------------------------------------------------------------------------
  326. //    FW_CTime::operator +=
  327. //----------------------------------------------------------------------------------------
  328.  
  329. const FW_CTime& FW_CTime::operator+=(FW_CTimeSpan timeSpan)
  330. {
  331.     fTime += timeSpan.GetTotalSeconds();
  332.     return *this;
  333. }
  334.  
  335. //========================================================================================
  336. // CLASS FW_CTimeSpan
  337. //========================================================================================
  338.  
  339.